# Common tests
# Pulled out of existing tests to prevent duplication.
#
test_smbclient()
{
	name="$1"
	cmd="$2"
	unc="$3"
	shift
	shift
	shift
	subunit_start_test "$name"
	output=$($VALGRIND $smbclient $CONFIGURATION "$unc" -c "$cmd" "$@" 2>&1)
	status=$?
	if [ x$status = x0 ]; then
		subunit_pass_test "$name"
	else
		printf '%s' "$output" | subunit_fail_test "$name"
	fi
	return $status
}

test_smbclient_expect_failure()
{
	name="$1"
	cmd="$2"
	unc="$3"
	shift
	shift
	shift
	subunit_start_test "$name"
	output=$($VALGRIND $smbclient $CONFIGURATION "$unc" -c "$cmd" "$@" 2>&1)
	status=$?
	if [ x$status = x0 ]; then
		printf '%s' "$output" | subunit_fail_test "$name"
		return 1
	else
		subunit_pass_test "$name"
		return 0
	fi
}

test_rpcclient_grep()
{
	name="$1"
	cmd="$2"
	srv="$3"
	grep="$4"
	shift
	shift
	shift
	shift
	subunit_start_test "$name"
	output=$($VALGRIND $rpcclient $CONFIGURATION "$srv" -c "$cmd" "$@" 2>&1)
	status=$?
	if [ x$status != x0 ]; then
		printf '%s' "$output" | subunit_fail_test "$name"
		return $status
	fi
	printf '%s' "$output" | grep -q "$grep"
	gstatus=$?
	if [ x$gstatus = x0 ]; then
		subunit_pass_test "$name"
	else
		printf '%s' "$output" | subunit_fail_test "$name"
	fi
	return $gstatus
}

test_rpcclient_expect_failure_grep()
{
	name="$1"
	cmd="$2"
	srv="$3"
	grep="$4"
	shift
	shift
	shift
	shift
	subunit_start_test "$name"
	output=$($VALGRIND $rpcclient $CONFIGURATION "$srv" -c "$cmd" "$@" 2>&1)
	status=$?
	if [ x$status = x0 ]; then
		printf '%s' "$output" | subunit_fail_test "$name"
		return 1
	fi
	printf '%s' "$output" | grep -q "$grep"
	gstatus=$?
	if [ x$gstatus = x0 ]; then
		subunit_pass_test "$name"
	else
		printf '%s' "$output" | subunit_fail_test "$name"
	fi
	return $gstatus
}

kerberos_kinit()
{
	kinit_tool="${1}"
	principal="${2}"
	password="${3}"
	shift 3
	kbase=$(basename ${kinit_tool})
	if [ "${kbase}" = "samba4kinit" ]; then
		kpassfile=$(mktemp)
		echo $password >${kpassfile}
		$kinit_tool -c ${KRB5CCNAME} --password-file=${kpassfile} "$@" $principal
		status=$?
		rm -f ${kpassfile}
	else
		echo $password | $kinit_tool "$@" $principal
		status=$?
	fi
	return $status
}

remove_directory()
{
	local xdir=${1}
	shift

	if [ "$xdir" = "/" ] || [ ! -d "$xdir" ] || [ -z "$(ls -A "$xdir")" ]; then
		return
	fi

	rm -rf "$xdir"
}

# This function should be used to either use a system tool or one of our
# build dir if available.
#
# Examples:
#
#   system_or_builddir_binary ldbsearch ${BUILDDIR}
#   system_or_builddir_binary kinit ${BUILDDIR} samba4kinit
#
system_or_builddir_binary()
{
	_bin_name="${1}"
	_build_dir="${2}"
	_alt_bin_name="${3}"

	_bin="$(command -v ${_bin_name})"
	_bin_build_path="${_build_dir}/${_bin_name}"

	if [ -n "${_alt_bin_name}" ]; then
	    _bin_build_path="${_build_dir}/${_alt_bin_name}"
	fi

	if [ -x "${_bin_build_path}" ]; then
		_bin="${_bin_build_path}"
	fi

	echo "${_bin}"
}
